package com.itguigu.inversion.improve;

/**
 * 根据依赖倒转优化后的代码
 */
public class DependencyInversion {
    public static void main(String[] args) {
        Person person = new Person();
        person.receive(new Email());
        person.receive(new QQ());
    }
}

/**
 * 一个Person有一个接受消息的功能
 */
class Person {
    /**
     * 采用依赖倒转,面向接口依赖,可以提高扩展性
     *
     * @param iReceiver 使用接口去依赖
     */
    public void receive(IReceiver iReceiver) {
        System.out.println(iReceiver.getInfo());
    }
}

/**
 * 电子邮件
 */
class Email implements IReceiver {

    @Override
    public String getInfo() {
        return "电子邮件信息: hello";
    }
}

class QQ implements IReceiver {

    @Override
    public String getInfo() {
        return "QQ信息: hello";
    }
}

/**
 * 定义IReceiver接口, 所有的消息类都实现这个接口
 */
interface IReceiver {
    String getInfo();
}

